A digital computer system typically includes a memory for storing instructions (collectively said to constitute a "program") and operands (collectively constituting "data") to be operated upon by the instructions. It typically also includes means for fetching the instructions from memory, decoding them, fetching from memory the operands called for by the instructions, performing upon the operands the operations called for by the instructions, and storing the modified operands back in memory.
Some of the operations called for by the instructions may be arithmetic operations, requiring two operands to be added or multiplied, one to be subtracted from the other, or one to be divided into the other.
A memory unit typically has a certain number of bits that it can store and retrieve in a single operation, commonly known as the "word size" of the memory. The data paths ("buses" and registers) within the computer system typically are provided to handle the same word size. Typical word sizes are sixteen or thirty-two bits.
For most efficient operation of a computer system, operand size should be limited to the word size; however, such an approach might not suit the needs of the user. Therefore, many computer systems have provision for performing computations on operands that must be stored and passed around the system in several words.
To enhance the flexibility of computer systems, there typically is a great deal of latitude regarding the manner in which operands are to be stored in memory. A typically sized word may hold several digits of an operand, but typically it is not required that operands be limited to occupying one word, or to beginning or ending on word boundaries; an operand may thus begin at some point within a word, may span several words, and may end at some point within a word.
Also, the user is typically permitted to store operands in any of several different forms--such as binary integers, floating point, "packed" decimal (typically BCD), or "zoned" alphanumeric data (typically ASCII code or EBCDIC code). Further, the user is typically permitted to request computation on two operands of different types, requiring internal conversion to a common type prior to performing the computation, and conversion to the destination operand's type subsequent to computation.
This requires that manipulations be performed upon the output of the computation means prior to storing a resultant operand back in memory: such manipulation might include inserting appropriate sign codes, inserting zone fields to convert a packed BCD result to zoned result, or replacing certain bytes or digits within an operand with predetermined codes (e.g., leading zero suppression, inserting asterisks for check protection, or inserting dollar signs, commas, and decimal points in numeric operands).
Also, manipulation is required when storing results back in an operand position where the current operand occupies only a portion of a word, since the other contents of that word ("residual data") must not be disturbed. These manipulations represent a significant overhead above and beyond the actual computations requested.
It is thus a general object of the present invention to provide improved digital computer systems.
It is a particular object of the present invention to increase the efficiency of the arithmetic elements of computer systems.
It is a more particular object of the present invention to provide the arithmetic elements of digital computer systems with apparatus for performing manipulations and transformations of computed results while those results are in transit, thus reducing overhead and inefficiency.